package userwash

import (
	"context"
	"gitee.com/liuxuezhan/ar-platform/assets-rpc/internal/dao/schema/userwash"
	"gorm.io/gorm"
)

type UserWashDescModel struct {
	ctx context.Context
	db  *gorm.DB
}

func (m *UserWashDescModel) GetDB() *gorm.DB {
	return m.db
}

func NewUserWashDescModel(ctx context.Context, db *gorm.DB) *UserWashDescModel {
	return &UserWashDescModel{
		ctx: ctx,
		db:  db,
	}
}

func (m *UserWashDescModel) Add(language, description string, status, accountId int64) error {
	userWashDesc := userwash.UserWashDesc{
		Language:    language,
		Description: description,
		Status:      status,
		AccountId:   accountId,
	}
	return m.db.WithContext(m.ctx).Create(&userWashDesc).Error
}

func (m *UserWashDescModel) UpdateStatus(id, status int64) error {
	return m.db.WithContext(m.ctx).Model(&userwash.UserWashDesc{}).Where("id = ?", id).Update("status", status).Error
}

func (m *UserWashDescModel) UpdateLanguageDescription(id int64, language, description string) error {
	return m.db.WithContext(m.ctx).Model(&userwash.UserWashDesc{}).Where("id = ?", id).Updates(map[string]any{
		"language": language, "description": description,
	}).Error
}

func (m *UserWashDescModel) List(language string, page, pageSize int64) ([]*userwash.UserWashDesc, int64, error) {
	tx := m.db.WithContext(m.ctx).Model(&userwash.UserWashDesc{})
	if language != "" {
		tx.Where("language = ?", language)
	}

	// 数据条数
	var total int64
	if err := tx.Count(&total).Error; err != nil {
		return nil, 0, err
	}

	var userWashDeices []*userwash.UserWashDesc
	if err := tx.Order("created_at desc").Offset(int((page - 1) * pageSize)).Limit(int(pageSize)).
		Find(&userWashDeices).Error; err != nil {
		return nil, 0, err
	}
	return userWashDeices, total, nil
}

func (m *UserWashDescModel) Last(language string) (*userwash.UserWashDesc, error) {
	var userWashDesc userwash.UserWashDesc
	return &userWashDesc, m.db.WithContext(m.ctx).Model(&userwash.UserWashDesc{}).Where("language = ?", language).Last(&userWashDesc).Error
}
